# 这里接收两个列表 defmerge(left, right): # 从两个有顺序的列表里边依次取数据比较后放入result # 每次我们分别拿出两个列表中最小的数比较,把较小的放入result result = [] while len(left) > 0and len(right) > 0: # 为了保持稳定性,当遇到相等的时候优先把左侧的数放进结果列表,因为left本来也是大数列中比较靠左的 if left[0] <= right[0]: result.append(left.pop(0)) else: result.append(right.pop(0)) # while循环出来之后 说明其中一个数组没有数据了,我们把另一个数组添加到结果数组后面 result += left result += right return result
if __name__ == '__main__': li = [5, 4, 30, 2, 1] li2 = merge_sort(li) print(li2)
defPartition(arr, firstIndex, lastIndex): i = firstIndex-1 for j in range(firstIndex, lastIndex): if arr[j] <= arr[lastIndex]: i = i+1 arr[i], arr[j] = arr[j], arr[i] arr[i+1], arr[lastIndex] = arr[lastIndex], arr[i+1] return i